/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/* This is a QRD reference design common file. The common device
 * tree approach would help OEM during development of their extended
 * device tree. Each new QRD OEM target can select its own include
 * files and provide board specific overrides in the top level DTS
 * file.
 *
 * For example:
 * msm8xxx-qrd.dtsi: QRD reference common node
 * msm8xxx-qrd-skuxx.dts:
 * /include/ "msm8610-qrd.dtsi"
 * / {
 *      List skuxx specific node which is different with QRD
 *      reference design.
 * };
 */

&soc {
	i2c@f9923000{
		focaltech@38{
			compatible = "focaltech,5x06";
			reg = <0x38>;
			interrupt-parent = <&msmgpio>;
			interrupts = <1 0x2>;
			vdd-supply = <&pm8110_l19>;
			vcc_i2c-supply = <&pm8110_l14>;
			focaltech,name = "ft6x06";
			focaltech,family-id = <0x06>;
			focaltech,reset-gpio = <&msmgpio 0 0x00>;
			focaltech,irq-gpio = <&msmgpio 1 0x00>;
			focaltech,display-coords = <0 0 480 800>;
			focaltech,panel-coords = <0 0 480 800>;
			focaltech,button-map= <139 102 158>;
			focaltech,no-force-update;
			focaltech,i2c-pull-up;
			focaltech,group-id = <1>;
			focaltech,hard-reset-delay-ms = <20>;
			focaltech,soft-reset-delay-ms = <150>;
			focaltech,num-max-touches = <2>;
			focaltech,fw-name = "ft_8610_qrd_fw.bin";
			focaltech,fw-delay-aa-ms = <100>;
			focaltech,fw-delay-55-ms = <30>;
			focaltech,fw-upgrade-id1 = <0x79>;
			focaltech,fw-upgrade-id2 = <0x08>;
			focaltech,fw-delay-readid-ms = <10>;
			focaltech,fw-delay-era-flsh-ms = <2000>;
		};
	};

	gen-vkeys {
		compatible = "qcom,gen-vkeys";
		label = "ft5x06_ts";
		qcom,disp-maxx = <480>;
		qcom,disp-maxy = <800>;
		qcom,panel-maxx = <481>;
		qcom,panel-maxy = <940>;
		qcom,key-codes = <139 0 102 158 0 0 0>;
		qcom,y-offset = <0>;
	};
	serial@f991e000 {
		status = "ok";
	};

	i2c@f9925000 { /* BLSP-1 QUP-3 */
		kionix@f {
			compatible = "kionix,kxtj9";
			reg = <0x0f>;
			interrupt-parent = <&msmgpio>;
			interrupts = <81 0x2>;
			vdd-supply = <&pm8110_l19>;
			vio-supply = <&pm8110_l14>;
			kionix,min-interval = <5>;
			kionix,init-interval = <200>;
			kionix,axis-map-x = <1>;
			kionix,axis-map-y = <0>;
			kionix,axis-map-z = <2>;
			kionix,g-range = <2>;
			kionix,negate-x;
			kionix,negate-y;
			kionix,negate-z;
			kionix,res-12bit;
		};
	};

	flashlight {
		compatible = "qcom,leds-gpio-flash";
		status = "okay";
		qcom,flash-en = <&msmgpio 18 0>;
		qcom,flash-now = <&msmgpio 19 0>;
		linux,name = "flashlight";
		linux,default-trigger = "flashlight-trigger";
	};

	qcom,wdt@f9017000 {
		qcom,bark-time = <13000>;
	};

	gpio_keys {
                compatible = "gpio-keys";
                input-name = "gpio-keys";

                camera_snapshot {
                        label = "camera_snapshot";
                        gpios = <&msmgpio 73 0x1>;
                        linux,input-type = <1>;
                        linux,code = <0x2fe>;
                        gpio-key,wakeup;
                        debounce-interval = <15>;
                };

                camera_focus {
                        label = "camera_focus";
                        gpios = <&msmgpio 74 0x1>;
                        linux,input-type = <1>;
                        linux,code = <0x210>;
                        gpio-key,wakeup;
                        debounce-interval = <15>;
                };

                vol_up {
                        label = "volume_up";
                        gpios = <&msmgpio 72 0x1>;
                        linux,input-type = <1>;
                        linux,code = <115>;
                        gpio-key,wakeup;
                        debounce-interval = <15>;
		};
	};

    sound {
	qcom,audio-routing =
		"RX_BIAS", "MCLK",
		"INT_LDO_H", "MCLK",
		"MIC BIAS Internal1", "Handset Mic",
		"MIC BIAS Internal2", "Headset Mic",
		"AMIC1", "MIC BIAS Internal1",
		"AMIC2", "MIC BIAS Internal2";
	qcom,mbhc-bias-internal;
    };
};

&i2c_cdc  {
	msm8x10_wcd_codec@0d{
		compatible = "qcom,msm8x10-wcd-i2c";
		reg = <0x0d>;

		interrupt-parent = <&wcd9xxx_intc>;
		interrupts = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
			     17 18 19 20 21 22 23>;

		cdc-vdda-cp-supply = <&pm8110_s4>;
		qcom,cdc-vdda-cp-voltage = <1800000 2150000>;
		qcom,cdc-vdda-cp-current = <650000>;

		cdc-vdda-h-supply = <&pm8110_l6>;
		qcom,cdc-vdda-h-voltage = <1800000 1800000>;
		qcom,cdc-vdda-h-current = <25000>;

		cdc-vdd-px-supply = <&pm8110_l6>;
		qcom,cdc-vdd-px-voltage = <1800000 1800000>;
		qcom,cdc-vdd-px-current = <10000>;

		cdc-vdd-1p2v-supply = <&pm8110_l4>;
		qcom,cdc-vdd-1p2v-voltage = <1200000 1200000>;
		qcom,cdc-vdd-1p2v-current = <5000>;

		cdc-vdd-mic-bias-supply = <&pm8110_l20>;
		qcom,cdc-vdd-mic-bias-voltage = <3075000 3075000>;
		qcom,cdc-vdd-mic-bias-current = <25000>;

		qcom,cdc-micbias-ldoh-v = <0x3>;
		qcom,cdc-micbias-cfilt-sel = <0x0>;
		qcom,cdc-micbias-cfilt-mv = <2700>;
		qcom,cdc-mclk-clk-rate = <12288000>;

		qcom,cdc-static-supplies = "cdc-vdda-h",
						"cdc-vdd-px",
						"cdc-vdd-1p2v";

		qcom,cdc-on-demand-supplies = "cdc-vdda-cp",
						"cdc-vdd-mic-bias";
	};

	msm8x10_wcd_codec@77{
		compatible = "qcom,msm8x10-wcd-i2c";
		reg = <0x77>;
	};

	msm8x10_wcd_codec@66{
		compatible = "qcom,msm8x10-wcd-i2c";
		reg = <0x66>;
	};

	msm8x10_wcd_codec@55{
		compatible = "qcom,msm8x10-wcd-i2c";
		reg = <0x55>;
	};
};

&spmi_bus {
	qcom,pm8110@0 {
		qcom,leds@a100 {
			status = "okay";
			qcom,led_mpp_2 {
				label = "mpp";
				linux,name = "button-backlight";
				linux,default-trigger = "hr-trigger";
				qcom,current-setting = <20>;
				qcom,default-state = "off";
				qcom,max-current = <40>;
				qcom,id = <6>;
				qcom,source-sel = <1>;
				qcom,mode-ctrl = <0x61>;
				qcom,mode = "manual";
			};
		};

		qcom,leds@a200 {
			status = "okay";
			qcom,led_mpp_3 {
				label = "mpp";
				linux,name = "wled-backlight";
				linux,default-trigger = "bkl-trigger";
				qcom,default-state = "on";
				qcom,max-current = <40>;
				qcom,id = <6>;
				qcom,source-sel = <8>;
				qcom,mode-ctrl = <0x10>;
				qcom,pwm-channel = <0>;
				qcom,pwm-us = <27>;
				qcom,vin-ctrl = <0x03>;
				qcom,mode = "pwm";
			};
		};
	};
};

&spmi_bus {
	qcom,pm8110@1 {
		qcom,vibrator@c000 {
			status = "okay";
			qcom,vib-timeout-ms = <15000>;
			qcom,vib-vtg-level-mV = <3100>;
		};
	};
};

&sdhc_1 {
	vdd-supply = <&pm8110_l17>;
	qcom,vdd-voltage-level = <2900000 2900000>;
	qcom,vdd-current-level = <200 400000>;

	vdd-io-supply = <&pm8110_l6>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <200 60000>;

	qcom,pad-pull-on = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-pull-off = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-drv-on = <0x4 0x4 0x4>; /* 10mA, 10mA, 10mA */
	qcom,pad-drv-off = <0x0 0x0 0x0>; /* 2mA, 2mA, 2mA */

	qcom,clk-rates = <400000 25000000 50000000 100000000 200000000>;
	qcom,bus-speed-mode = "HS200_1p8v", "DDR_1p8v";
	qcom,nonremovable;

	status = "ok";
};

&sdhc_2 {
	vdd-supply = <&pm8110_l18>;
	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <15000 400000>;

	vdd-io-supply = <&pm8110_l21>;
	qcom,vdd-io-voltage-level = <1800000 2950000>;
	qcom,vdd-io-current-level = <200 50000>;

	qcom,pad-pull-on = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-pull-off = <0x0 0x3 0x3>; /* no-pull, pull-up, pull-up */
	qcom,pad-drv-on = <0x4 0x4 0x4>; /* 10mA, 10mA, 10mA */
	qcom,pad-drv-off = <0x0 0x0 0x0>; /* 2mA, 2mA, 2mA */

	qcom,clk-rates = <400000 25000000 50000000>;

	#address-cells = <0>;
	interrupt-parent = <&sdhc_2>;
	interrupts = <0 1 2>;
	#interrupt-cells = <1>;
	interrupt-map-mask = <0xffffffff>;
	interrupt-map = <0 &intc 0 125 0
			1 &intc 0 221 0
			2 &msmgpio 42 0x3>;
	interrupt-names = "hc_irq", "pwr_irq", "status_irq";
	cd-gpios = <&msmgpio 42 0x1>;

	status = "ok";
};

&pm8110_chg {
	status = "ok";

	qcom,chgr@1000 {
		status = "ok";
		qcom,tchg-mins = <250>;
	};

	qcom,buck@1100 {
		status = "ok";
	};

	qcom,bat-if@1200 {
		status = "ok";
	};

	qcom,usb-chgpth@1300 {
		status = "ok";
	};

	qcom,chg-misc@1600 {
		status = "ok";
	};
};

&pm8110_gpios {
	gpio@c000 { /* GPIO 1 */
	};

	gpio@c100 { /* GPIO 2 */
	};

	gpio@c200 { /* GPIO 3 */
	};

	gpio@c300 { /* GPIO 4 */
	};
};

&pm8110_mpps {
	mpp@a000 { /* MPP 1 */
	};

	mpp@a100 { /* MPP 2 */
		status = "disabled";
	};

	mpp@a200 { /* MPP 3 */
		status = "disabled";
	};

	mpp@a300 { /* MPP 4 */
	};
};

&pm8110_vadc {
	chan@30 {
		label = "batt_therm";
		qcom,scale-function = <6>;
	};
};

&android_usb {
	qcom,android-usb-cdrom;
	qcom,android-usb-internal-ums;
};

&mdss_mdp {
	batfet-supply = <&pm8110_chg_batif>;
};
